﻿#pragma warning(disable: 4996)
#pragma warning(disable: 6031)

/*
[先说点出题背景]

这个题是为低年级同学、学C语言的同学准备的，因为，对这部分同学，这个题目编写起来略有一点复杂。如果是高年级、学过了正则表达式（Regular Expression）的同学或者学过了Java等OO语言的同学做这个题，应当发现这题比较简单吧。哦，对了，什么是tokenizer？请自行查询解决。反正在此处不应翻译成“令牌解析器”。

[正题]

四则运算表达式由运算数（必定包含数字，可能包含正或负符号、小数点）、运算符（包括+、-、*、/）以及小括号（(和)）组成，每个运算数、运算符和括号都是一个token（标记）。现在，对于给定的一个四则运算表达式，请把她的每个token切分出来。题目保证给定的表达式是正确的，不需要做有效性检查。

输入格式:
在一行中给出长度不超过40个字符的表达式，其中没有空格，仅由上文中token的字符组成

输出格式:
依次输出表达式中的tokens，每个token占一行。

输入样例:
32*((2-2)+5)/(-15)
输出样例:
32
*
(
(
2
-
2
)
+
5
)
/
(
-15
)
*/

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

char buf[255];

void read_data() {
	gets(buf);
}

int is_parentheses(char c) {
	return c == '(' || c == ')';
}

int is_product(char c) {
	return c == '*';
}


void solve2() {
	int n = 0;
	char c;
	int status=0;
	int m = 0;
	int ps = 0;
	n = strlen(buf);
	for(int i=0;i<n;++i)
	{
		c = buf[i];
		switch (c) {
		case '(':
			ps = status;
			status = 4;
			if (i > 0)
				printf("\n");
			printf("%c", c);
			break;
		case ')':
		case '*':
		case '/':
			ps = status;
			status = 1;
			if (i > 0)
				printf("\n");
			printf("%c", c);
			break;
		case '\n':
			break;
		case '0':
		case '1':
		case '2':
		case '3':
		case '4':
		case '5':
		case '6':
		case '7':
		case '8':
		case '9':
		case '.':
			if ((ps == 4 && status == 3)|| status==0) {
			}
			else if (status != 2)
				printf("\n");
			ps = status;
			status = 2;
			printf("%c", c);
			break;
		case '-':
		case '+':
			ps = status;
			status = 3;
			if (i > 0)
				printf("\n");
			printf("%c", c);
			break;
		default:
			printf("%c", c);
		}
	}
	printf("\n");
}

void solve()
{
	char c, flag = 0;
	int i = 0;
	int n = strlen(buf);
	printf("%c", buf[0]);
	for (int i = 1; i < n; ++i) {
		if ('0' <= buf[i] && buf[i] <= '9' || buf[i] == '.') {
			if (flag)
				printf("\n");
			printf("%c", buf[i]);
			flag = 0;
		}
		else {
			if (buf[i - 1] == '(' && buf[i] == '-') {
				printf("\n%c", buf[i]);
				flag = 0;
			}
			else {
				printf("\n%c", buf[i]);
				flag = 1;
			}
		}
	}
	printf("\n");
}

int main()
{
	freopen("D:/Develop/GitRepos/MOOC/浙江大学/数据结构/201906/DataStructure/M2019秋C入门和进阶练习集/7-62.txt", "r", stdin);
	read_data();
	solve();
	return 0;
}

//freopen("D:/Develop/GitRepos/MOOC/浙江大学/数据结构/201906/DataStructure/M2019秋C入门和进阶练习集/7-50.txt", "r", stdin);
